package foundation.SurModel.rndForest;

import java.util.List;

import foundation.SurModel.rndForest.sample.MLearnTbl;

public class RndForestSurModel {
	private Trainer  trainer=null;//训练器
	private Predictor predictor=null;//预测器
	private MLearnTbl mlTbl=null;//机器学习表
	private static RndForestSurModel rndFstModel=null;//随机森林代理模型单例
	
	private RndForestSurModel(){
		trainer=new Trainer();
		predictor=new Predictor();
		mlTbl=MLearnTbl.getInstance();
	}
	public static RndForestSurModel getInstance(){
		if(rndFstModel==null){
		   rndFstModel=new RndForestSurModel();	
		}
		return rndFstModel;
	}
	/**
	 * 最大使用率处理器分类训练
	 */
	public void trainMaxProUtil(){
		trainer.trainMaxProUtil(mlTbl);
	}
	/**
	 * 最小使用率处理器分类训练
	 */
	public void trainMinProUtil(){
		trainer.trainMinProUtil(mlTbl);
	}
	/**
	 * 响应时间模型训练
	 * @param mlTbl
	 */
	public void trainRest(){

		trainer.trainRest(mlTbl);
	}
	/**
	 * 可靠性模型训练
	 * @param mlTbl
	 */
	public void trainRelb(){
		trainer.trainRelb(mlTbl);
	}

	/**
	 * 预测最大使用率处理器的编号
	 * @param mlTbl:机器学习表
	 * @param mlDFcodes：处理器速度为float类；服务器名为编号；组件选择中组件名为编号
	 * @return
	 * @throws Exception 
	 */
	public int predictMaxProUtil(List<StringBuffer> mlDFcodes) throws Exception {
		return predictor.predictMaxProUtil(mlDFcodes);
	}
	/**
	 * 预测最小使用率处理器的编号
	 * @param mlTbl:机器学习表
	 * @param mlDFcodes：处理器速度为float类；服务器名为编号；组件选择中组件名为编号
	 * @return
	 * @throws Exception 
	 */
	public int predictMinProUtil(List<StringBuffer> mlDFcodes) throws Exception {
		return predictor.predictMinProUtil(mlDFcodes);
	}

	/**
	 * 预测响应时间值
	 * @param mlTbl:机器学习表
	 * @param mlDFcodes：处理器速度为float类；服务器名为编号；组件选择中组件名为编号
	 * @throws Exception 
	 */
	public float predictRest(List<StringBuffer> mlDFcodes) throws Exception {
		return predictor.predictRest(mlDFcodes);
	}
	/**
	 * 预测可靠性值
	 * @param mlTbl:机器学习表
	 * @param mlDFcodes：处理器速度为float类；服务器名为编号；组件选择中组件名为编号
	 */
	public float predictRelb(List<StringBuffer> mlDFcodes)  throws Exception{
		return predictor.predictRelb(mlDFcodes);
	}
	public Trainer getTrainer() {
		return trainer;
	}
	public void setTrainer(Trainer trainer) {
		this.trainer = trainer;
	}
	public Predictor getPredictor() {
		return predictor;
	}
	public void setPredictor(Predictor predictor) {
		this.predictor = predictor;
	}
	public MLearnTbl getMlTbl() {
		return mlTbl;
	}
	public void setMlTbl(MLearnTbl mlTbl) {
		this.mlTbl = mlTbl;
	}
}
